************************************************++===++***+==+++++++*
+++++++++++************************************+=----====:  .###**++*
+==++++++++++++++++++++++++++++++++++++++++++++==-:--::::. .-*****+**
============================================++===::-+-:==..-+-++++==+
--:------------=========---===-----:::::----++=-:.+**++*=:=*=:======*
****+++++++++********************+##**********++=+******++*#=-=*+==+#
%########%%%%%###%%%%#%%%###**++*+##********#***********************#
########################*******#*+*#*******##***********************#
#####%%######%%#######************###*****#####**##*****************#
%%%%%#####%%%#%####**************####*******************************#
###########********************##*###*******##*#********************#
#****#####*************************#****###########*****************#
#####%###************************#**********************************#
#%###*************************##*#**+*****######*****####***********#
##*******************************#**+**#**################*#********#
#********************************#***+*****###******######*******####
#************************************+********#######*#*************#
#********************************##**+*******#######**###**##########
******************************#**####**#****####***##******##****###%
*********************************###********#########****#####*****##
**********************************#****+*##############*###########*#
*******#**************************#****+*****####**####*###########*#
###%%%%%%%%%%%%%%#######%%%%%%%###%%%%%##%%%%%%%%%%%%%%%%%%%%%%%%%%%%